home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’96 / PredatorPrey / YEquals.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-22  |  10.8 KB  |  441 lines  |  [TEXT/KAHL]

  1. /* YEquals.c -- Modal dialog */
  2. /* Created 940321 20:45 by AppMaker */
  3.  
  4. #include <Types.h>
  5. #include <Quickdraw.h>
  6. #include <Controls.h>
  7. #include <Dialogs.h>
  8. #include <Events.h>
  9. #include <Lists.h>
  10. #include <Menus.h>
  11. #include <TextEdit.h>
  12. #include "ResourceDefs.h"
  13. #include "Miscellany.h"
  14. #include "DialogAids.h"
  15. #include "WindowAids.h"
  16. #include "YEquals.h"
  17. #include "ErrorWindow.h"
  18. #include <AppleEvents.h>
  19.  
  20. #define OKButton        1 
  21. #define CancelButton    2 
  22. #define Y1Label            3 
  23. #define Y2Label            4 
  24. #define Y3Label            5 
  25. #define Y4Label            6 
  26. #define Field7            7     /*    Y1 text    */
  27. #define Field8            8     /*    Y2 text    */ 
  28. #define Field9            9     /*    Y3 text    */ 
  29. #define Field10            10     /*    Y4 text    */ 
  30. #define YEQUALSLabel    11 
  31. #define Button12        12     /*    ^        */
  32. #define Button13        13     /*    /        */
  33. #define Button14        14     /*    *        */
  34. #define Button15        15     /*    -        */
  35. #define Button16        16  /*    +        */
  36. #define Button17        17  /*    π        */
  37. #define eButton            18     /*    e^        */
  38. #define LogButton        19     /*    Log        */
  39. #define LnButton        20     /*    Ln        */
  40. #define SinButton        21     /*    Sin        */
  41. #define CosButton        22     /*    Cos        */
  42. #define TanButton        23     /*    Tan        */
  43. #define ArcTanButton    24     /*    ArcTan    */ 
  44. #define ArcSinButton    25     /*    ArcSin    */ 
  45. #define ArcCosButton    26     /*    ArcCos    */ 
  46. #define x10Button        27     /*    10^        */ 
  47. #define Button28        28     /*    √        */ 
  48. #define Button29        29     /*    (        */
  49. #define Button30        30     /*    )        */
  50. #define qButton            31     /*    theta    */
  51. #define x7Button        32     /*    7        */ 
  52. #define x8Button        33     /*    8        */ 
  53. #define x9Button        34     /*    9        */ 
  54. #define x4Button        35     /*    4        */ 
  55. #define x5Button        36     /*    5        */ 
  56. #define x6Button        37     /*    6        */ 
  57. #define x1Button        38     /*    1        */
  58. #define x2Button        39     /*    2        */ 
  59. #define x0Button        40     /*    0        */ 
  60. #define Button41        41     /*    decimal point    */ 
  61. #define x3Button        42     /*    3        */
  62. #define xxButton        43    /*    x        */
  63. #define ChkSynButton    44    /*    check syntax    */
  64. #define SelTgt            45    /*    select target    */
  65. //        OSErr        FindAProcess        (
  66. //                                            OSType typeToFind,
  67. //                                            OSType creatorToFind,
  68. //                                            ProcessSerialNumberPtr processSN,
  69. //                                            ProcessInfoRecPtr infoRecToFill
  70. //                                        );
  71.  
  72. static void DoChkSynButton ( short lastItem, YEqualsRec *YEquals, DialogPtr    theDialog);
  73.  
  74.  
  75. /*----------*/
  76.  
  77.  
  78. static void DoChkSynButton ( short lastItem, YEqualsRec *YEquals, DialogPtr    theDialog)
  79. {
  80.     short            i,j,k,m;
  81.     WindowPtr        errorWin;
  82.     YEqualsRecPtr    info;
  83.     StringHandle    message;
  84.     Point            thePt;
  85.     Rect            Y1Rect,Y2Rect,Y3Rect,Y4Rect;
  86.     
  87.     info = YEquals;
  88.     j = 0;
  89.     k = 0;
  90.     m = 0;
  91.     SetRect(&Y1Rect,190,4,380,22);
  92.     SetRect(&Y2Rect,190,22,380,40);
  93.     SetRect(&Y3Rect,190,40,380,58);
  94.     SetRect(&Y4Rect,190,58,380,76);
  95.     switch(lastItem)
  96.     {
  97.         case 7:
  98.                 MoveTo(4,0);
  99.                 for(i = 1;i <= info->Field7Text[0];i++)
  100.                 {
  101.                     if(info->Field7Text[i] == '(')    j++;
  102.                     if(info->Field7Text[i] == ')')    k++;
  103.                 }
  104.             break;
  105.         case 8:
  106.                 for(i = 1;i <= info->Field8Text[0];i++)
  107.                 {
  108.                     if(info->Field8Text[i] == '(')    j++;
  109.                     if(info->Field8Text[i] == ')')    k++;
  110.                 }
  111.             break;
  112.         case 9:
  113.                 for(i = 1;i <= info->Field9Text[0];i++)
  114.                 {
  115.                     if(info->Field9Text[i] == '(')    j++;
  116.                     if(info->Field9Text[i] == ')')    k++;
  117.                 }
  118.             break;
  119.         case 10:
  120.                 for(i = 1;i <= info->Field10Text[0];i++)
  121.                 {
  122.                     if(info->Field10Text[i] == '(')    j++;
  123.                     if(info->Field10Text[i] == ')')    k++;
  124.                 }
  125.             break;
  126.     }
  127.     if( j == k )    ;    /*    do nothing    */
  128.     else
  129.     {
  130.         m++;
  131.         Move(0,m * 18);
  132.         GetPen(&thePt);
  133.         switch(lastItem)
  134.         {
  135.             case 7:
  136.                     EraseRect(&Y1Rect);
  137.                     BlockMove("\pIn the Y1 = field, there ",cur->Field3Handle,25);
  138.                     /*DrawString("\pIn the Y1 = field, there ");*/
  139.                 break;
  140.             case 8:
  141.                     EraseRect(&Y2Rect);
  142.                     BlockMove("\pIn the Y2 = field, there ",cur->Field3Handle,25);
  143. /*                    DrawString("\pIn the Y2 = field, there ");*/
  144.                 break;
  145.             case 9:
  146.                     EraseRect(&Y3Rect);
  147.                     BlockMove("\pIn the Y3 = field, there ",cur->Field3Handle,25);
  148. /*                    DrawString("\pIn the Y3 = field, there ");*/
  149.                 break;
  150.             case 10:
  151.                     EraseRect(&Y4Rect);
  152.                     BlockMove("\pIn the Y4 = field, there ",cur->Field3Handle,25);
  153. /*                    DrawString("\pIn the Y4 = field, there ");*/
  154.                 break;
  155.         }
  156.         if(j - k >= 2)
  157.         {
  158.             BlockMove("\pare ",cur->Field3Handle,4);
  159.             /*DrawString("\pare ");*/
  160.             message = GetString(3001);    /*    too many occurences of '\('    */
  161.             BlockMove(*message,cur->Field3Handle,GetHandleSize((Handle) message));
  162.  
  163.             /*DrawString(*message);*/
  164.             MoveTo(thePt.h,thePt.v);
  165.         }
  166.         else if(j - k == 1 || k - j == 1)
  167.         {
  168.             BlockMove("\pis ",cur->Field3Handle,3);
  169. /*            DrawString("\pis ");*/
  170.             message = GetString(3002);    /*    no '\)' found to match '\('    */
  171.             BlockMove(*message,cur->Field3Handle,GetHandleSize((Handle) message));
  172.             /*DrawString(*message);*/
  173.             MoveTo(thePt.h,thePt.v);
  174.         }
  175.         else if(k - j >=2)
  176.         {
  177.             BlockMove("\pare ",cur->Field3Handle,4);
  178. /*            DrawString("\pare ");*/
  179.             message = GetString(3000);    /*    too many occurences of '\)'    */
  180.             BlockMove(*message,cur->Field3Handle,GetHandleSize((Handle) message));
  181.             /*DrawString(*message);*/
  182.             MoveTo(thePt.h,thePt.v);
  183.         }
  184.     }
  185.  
  186. } /*DoChkSynButton*/
  187.  
  188. /*----------*/
  189. Boolean GetYEquals (YEqualsRec    *YEquals)
  190. {
  191.     DialogPtr        theDialog;
  192.     GrafPtr            savePort,save2Port;
  193.     Boolean            result;
  194.     Boolean            done;
  195.     short            itemNr;
  196.     register YEqualsRecPtr    info;
  197.     short            i,lastItem;
  198.     TEHandle        dialogTE;
  199.     WindowPtr        saveCur,errorCur;
  200.     WindowPtr        errorWin = nil;
  201.     ModalFilterUPP    gMyStandardFilterUPP;
  202.     OSErr            iErr;
  203.     AEEventClass    theAEEventClass;
  204.     AEEventID        theAEEventID;
  205.     AppleEvent        theResult;
  206.     DescType        typeCode;
  207.  
  208.     lastItem = 7;
  209.     GetPort (&savePort);
  210.     InitCursor ();
  211.     theDialog = GetNewDialog (YEqualsID, nil, (WindowPtr) -1L);
  212.     SetPort (theDialog);
  213.     info = YEquals;
  214.     SetDText (Field7, info->Field7Text);
  215.     SetDText (Field8, info->Field8Text);
  216.     SetDText (Field9, info->Field9Text);
  217.     SetDText (Field10, info->Field10Text);
  218.     
  219.     ShowWindow (theDialog);
  220.     OutlineButton (1);
  221.     gMyStandardFilterUPP = NewModalFilterProc(StandardFilter);    /*    new    */
  222.     done = false;
  223.     while (!done) {
  224.         
  225.         //ModalDialog (StandardFilter, &itemNr);
  226.         ModalDialog(gMyStandardFilterUPP,&itemNr);
  227.         dialogTE = ( (DialogPeek)theDialog)->textH;
  228.         switch (itemNr) {
  229.             case OKButton:
  230.                     result = true;
  231.                     done = true;
  232.                 break;
  233.             case CancelButton:
  234.                     result = false;
  235.                     done = true;
  236.                 break;
  237.             case Field7:
  238.                     GetDText (itemNr, info->Field7Text);
  239.                     lastItem = itemNr;
  240.                 break;
  241.             case Field8:
  242.                     GetDText (itemNr, info->Field8Text);
  243.                     lastItem = itemNr;
  244.                 break;
  245.             case Field9:
  246.                     GetDText (itemNr, info->Field9Text);
  247.                     lastItem = itemNr;
  248.                 break;
  249.             case Field10:
  250.                     GetDText (itemNr, info->Field10Text);
  251.                     lastItem = itemNr;
  252.                 break;
  253.             case Button12:
  254.                     TEKey(94,dialogTE);        /*    ^(    */
  255.                     TEKey(40,dialogTE);
  256.                                             /*    TEKey forces an update after every    */
  257.                                             /*    key, whereas SetIText will let you    */
  258.                                             /*    blast a bunch of chars to the field    */
  259.                                             /*    before the update                    */
  260.                 break;
  261.             case Button13:
  262.                     TEKey(47,dialogTE);        /*    /    */
  263.                 break;
  264.             case Button14:
  265.                     TEKey(42,dialogTE);        /*    *    */
  266.                 break;
  267.             case Button15:
  268.                     TEKey(45,dialogTE);        /*    -    */
  269.                 break;
  270.             case Button16:
  271.                     TEKey(43,dialogTE);        /*    +    */
  272.                 break;
  273.             case Button17:
  274.                     TEKey(185,dialogTE);        /*    π    */
  275.                 break;
  276.             case eButton:
  277.                     TEKey(101,dialogTE);        /*    e^(    */
  278.                     TEKey(94,dialogTE);
  279.                     TEKey(40,dialogTE);
  280.                 break;
  281.             case LogButton:
  282.                     TEKey(76,dialogTE);        /*    Log(    */
  283.                     TEKey(111,dialogTE);
  284.                     TEKey(103,dialogTE);
  285.                     TEKey(40,dialogTE);
  286.                 break;
  287.             case LnButton:
  288.                     TEKey(76,dialogTE);        /*    Ln(    */
  289.                     TEKey(110,dialogTE);
  290.                     TEKey(40,dialogTE);
  291.                 break;
  292.             case SinButton:
  293.                     TEKey(83,dialogTE);        /*    Sin(    */
  294.                     TEKey(105,dialogTE);
  295.                     TEKey(110,dialogTE);
  296.                     TEKey(40,dialogTE);
  297.                 break;
  298.             case CosButton:
  299.                     TEKey(67,dialogTE);        /*    Cos(    */
  300.                     TEKey(111,dialogTE);
  301.                     TEKey(115,dialogTE);
  302.                     TEKey(40,dialogTE);
  303.                 break;
  304.             case TanButton:
  305.                     TEKey(84,dialogTE);        /*    Tan(    */
  306.                     TEKey(97,dialogTE);
  307.                     TEKey(110,dialogTE);
  308.                     TEKey(40,dialogTE);
  309.                 break;
  310.             case ArcTanButton:
  311.                     TEKey(65,dialogTE);        /*    ArcTan(    */
  312.                     TEKey(114,dialogTE);
  313.                     TEKey(99,dialogTE);
  314.                     TEKey(84,dialogTE);
  315.                     TEKey(97,dialogTE);
  316.                     TEKey(110,dialogTE);
  317.                     TEKey(40,dialogTE);
  318.                 break;
  319.             case ArcSinButton:
  320.                     TEKey(65,dialogTE);        /*    ArcSin(    */
  321.                     TEKey(114,dialogTE);
  322.                     TEKey(99,dialogTE);
  323.                     TEKey(83,dialogTE);
  324.                     TEKey(105,dialogTE);
  325.                     TEKey(110,dialogTE);
  326.                     TEKey(40,dialogTE);
  327.                 break;
  328.             case ArcCosButton:
  329.                     TEKey(65,dialogTE);        /*    ArcCos(    */
  330.                     TEKey(114,dialogTE);
  331.                     TEKey(99,dialogTE);
  332.                     TEKey(67,dialogTE);
  333.                     TEKey(111,dialogTE);
  334.                     TEKey(115,dialogTE);
  335.                     TEKey(40,dialogTE);
  336.                 break;
  337.             case x10Button:
  338.                     TEKey(49,dialogTE);        /*    10^(    */
  339.                     TEKey(48,dialogTE);
  340.                     TEKey(94,dialogTE);
  341.                     TEKey(40,dialogTE);
  342.                 break;
  343.             case Button28:
  344.                     TEKey(195,dialogTE);     /*    √    */ 
  345.                     TEKey(40,dialogTE);
  346.                 break;
  347.             case Button29:
  348.                     TEKey(40,dialogTE);     /*    (    */
  349.                 break;
  350.             case Button30:
  351.                     TEKey(41,dialogTE);     /*    )    */
  352.                 break;
  353.             case qButton:
  354.                     TEKey(84,dialogTE);     /*    theta    */
  355.                     TEKey(104,dialogTE);
  356.                     TEKey(101,dialogTE);
  357.                     TEKey(116,dialogTE);
  358.                     TEKey(97,dialogTE);
  359.                 break;
  360.             case x7Button:
  361.                     TEKey(55,dialogTE);     /*    7    */
  362.                 break;
  363.             case x8Button:
  364.                     TEKey(56,dialogTE);     /*    8    */
  365.                 break;
  366.             case x9Button:
  367.                     TEKey(57,dialogTE);     /*    9    */
  368.                 break;
  369.             case x4Button:
  370.                     TEKey(52,dialogTE);     /*    4    */
  371.                 break;
  372.             case x5Button:
  373.                     TEKey(53,dialogTE);     /*    5    */
  374.                 break;
  375.             case x6Button:
  376.                     TEKey(54,dialogTE);     /*    6    */
  377.                 break;
  378.             case x1Button:
  379.                     TEKey(49,dialogTE);     /*    1    */
  380.                 break;
  381.             case x2Button:
  382.                     TEKey(50,dialogTE);     /*    2    */
  383.                 break;
  384.             case x0Button:
  385.                     TEKey(48,dialogTE);     /*    0    */
  386.                 break;
  387.             case Button41:
  388.                     TEKey(46,dialogTE);     /*    decimal point    */
  389.                 break;
  390.             case x3Button:
  391.                     TEKey(51,dialogTE);     /*    3    */
  392.                 break;
  393.             case xxButton:
  394.                     TEKey(120,dialogTE);     /*    x    */        
  395.                 break;
  396.             case ChkSynButton:
  397.                     GetDText (7, info->Field7Text);
  398.                     GetDText (8, info->Field8Text);
  399.                     GetDText (9, info->Field9Text);
  400.                     GetDText (10, info->Field10Text);
  401.                     GetPort(&save2Port);        /*    GrafPtr        save2Port;    */
  402.                     /*saveCur = curWindow;*/        /*    WindowPtr    saveCur;    */
  403.                     if(errorWin == nil)
  404.                     {
  405.                         errorWin = OpenErrorWindow ("\p", 0, 0);    /*OpenErrorWindow (fName, vRefNum, fRefNum);*/
  406.                         /*SetPort(errorWin);*/
  407.                         /*errorCur = curWindow;*/
  408.                         /*SelectWindow(errorWin);*/
  409.                     }
  410.                     else
  411.                     {
  412.                         SetPort(errorWin);
  413.                     }
  414.                     for(i = 7;i <= 10;i++)
  415.                     {
  416.                         DoChkSynButton ( i/*lastItem*/ , YEquals, theDialog);
  417.                     }
  418.                     /*SetInfo (saveCur);*/
  419.                     SetPort(save2Port);
  420.                     SelectWindow((WindowPtr)save2Port);
  421.                 break;
  422.                 
  423.         } /* switch */
  424.     } /* while */
  425.     //DisposHandle ((Handle) cur->filename);
  426.     //DiscardInfo (curWindow);
  427.  
  428.     
  429.     //theAEEventID =  ;
  430.     //theAEEventClass = 'aevt';
  431.     //iErr = AECreateDesc(typeCode,dataPtr,dataSize,&result);
  432.     //iErr = AECreateAppleEvent(theAEEventClass,theAEEventID,&target,returnID,transactionID,&theResult);
  433.     //AESend(result);
  434.  
  435.     DisposDialog (theDialog);
  436.     SetPort (savePort);
  437.     return (result);
  438. } /*GetYEquals*/
  439.  
  440. /* YEquals */
  441.